import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# 1生成具有5个特征的数据
# 生成具有5个特征和2个类别的合成数据
X, y = make_classification(n_samples=100, n_features=5, n_informative=2, n_redundant=3, n_classes=2, random_state=42)
# 2. 应用 LDA
# 应用LDA，降维到1维
lda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X, y)
# 3. 获取 LDA 的投影方向
# 获取LDA的投影方向
w = lda.coef_[0]  # LDA的权重向量
w /= np.linalg.norm(w)  # 归一化
# 4. 可视化原始数据（仅选择前两个特征进行可视化）
# 设置图形尺寸
plt.figure(figsize=(10, 6))

# 绘制原始数据（前两个特征）
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='o', label='Original Data')

# 绘制投影方向（在二维平面的投影）
plt.plot([0, w[0] * 10], [0, w[1] * 10], color='red', linewidth=2, label='LDA Projection Direction')

# 设置图例和标题
plt.title('LDA Projection (First Two Features)')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()

# 显示图形
plt.show()
# 5. 可视化LDA变换后的数据
# 设置图形尺寸
plt.figure(figsize=(10, 6))

# 绘制LDA变换后的数据
plt.scatter(X_lda, np.zeros_like(X_lda), c=y, cmap='viridis', marker='o', label='LDA Transformed Data')

# 设置图例和标题
plt.title('LDA Transformed Data')
plt.xlabel('LDA Component')
plt.yticks([])
plt.legend()

# 显示图形
plt.show()
